/*
 * ArchConfig.c
 *
 *  Created on: 21/09/2011
 *      Author: utn_so
 */
#include "PDD.h"
//

int cargarLogYArchivoConfiguracion(t_pdd *pPdd){
	char *buffer;
	int port;
	char *tempAlgoPlan;
	char *tempModoInicio;

/*	if((pPdd->configArch.log= log_create("PDD", "PddLog", 2, M_CONSOLE_DISABLE))==NULL){
		printf("No se creo el log");
		return 0;
	};
*/

	if((buffer=fileio_openfile("PddConfig"))==NULL){
		logMessage(LOG_ERR,"No se creo el archivo configuracion");
		printf("No se creo el archivo configuracion");

		return 0;
		//Error al abrir el archivo
	}
	pPdd->configArch = (t_config*)malloc(sizeof(t_config));
	logMessage(LOG_INFO,"Procesando archivo de configuracion....");

	/*Modo de inicio*/
	if(!(tempModoInicio=config_loader_getString(buffer,"ModoDeInicio:"))){
		logMessage(LOG_ERR,"Falta Modo de Inicio");
		return 0;
	}

	if(!strcmp(tempModoInicio,"CONNECT")){
		pPdd->configArch->modoInicio=CONNECT;
		logMessage(LOG_INFO,"Modo Inicio: CONNECT");
	}else{
		pPdd->configArch->modoInicio=LISTEN;
		logMessage(LOG_INFO,"Modo Inicio: LISTEN");
	}

	/*Algoritmo*/
	if(!(tempModoInicio=config_loader_getString(buffer,"AlgoPlan:"))){
		logMessage(LOG_ERR,"Falta AlgoPlano");
		return 0;
	}

	if(!strcmp(tempModoInicio,"CSCAN")){
		pPdd->configArch->algoritmoPlanificacion=CSCAN;
		logMessage(LOG_INFO,"Algoritmo de Planificacion:CSCAN");
	}else{
		pPdd->configArch->algoritmoPlanificacion=FSCAN;
		logMessage(LOG_INFO,"Algoritmo de Planificacion:FSCAN");
	}

	/*Flag logs*/
	if(!(pPdd->configArch->flagLogs=config_loader_getInt(buffer,"FlagLogs:"))){
		logMessage(LOG_ERR,"Falta Flag de Activacion");
		return 0;
	}

	if(pPdd->configArch->flagLogs){
		logMessage(LOG_INFO,"Flag Logs: Activado");
	}else{
		logMessage(LOG_INFO,"Flag Logs: Desactivado");
	}

	/*Id disco*/
	if(!(pPdd->configArch->idDisco=config_loader_getInt(buffer,"IdDisco:"))){
		logMessage(LOG_ERR,"Falta el ID del disco");
		return 0;
	}
	logMessage(LOG_INFO,"ID del Disco: %d",pPdd->configArch->idDisco);

	/*Cabeza*/
	pPdd->configArch->cabezas=1;

	/*Cilindros*/
	if(!(pPdd->configArch->cilindros=config_loader_getInt(buffer,"Cilindros:"))){
		logMessage(LOG_ERR,"Falta cantidad de cilindros");
		return 0;
	}
	logMessage(LOG_INFO,"Cantidad de Cilindros: %d",pPdd->configArch->cilindros);

	/*Sectores*/
	if(!(pPdd->configArch->sectores=config_loader_getInt(buffer,"Sectores:"))){
		logMessage(LOG_ERR,"Falta cantidad de Sectores");
		return 0;
	}
	logMessage(LOG_INFO, "Cantidad de Sectores: %d",pPdd->configArch->sectores);

	/*My ip*/
	if(!(pPdd->configArch->myIp=config_loader_getString(buffer,"MyIp:"))){
		logMessage(LOG_ERR,"Flata mi ip");
		return 0;
	}
	logMessage(LOG_INFO,"Mi ip es: %s",pPdd->configArch->myIp);

	/*Ip dispo*/
	if(!(pPdd->configArch->ipDispo=config_loader_getString(buffer,"IpDispo:"))){
		logMessage(LOG_ERR,"Flata la ip del dispo");
		return 0;
	}
	logMessage(LOG_INFO,"La ip del dispo es: %s",pPdd->configArch->ipDispo);

	/*Puerto Recv*/
	if(!(pPdd->configArch->puertoRecv=config_loader_getInt(buffer,"PuertoRecv:"))){
		logMessage(LOG_ERR,"Falta Puerto Recv");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto Recv: %d",pPdd->configArch->puertoRecv);

	/*Puerto Send*/
	if(!(pPdd->configArch->puertoSend=config_loader_getInt(buffer,"PuertoSend:"))){
		logMessage(LOG_ERR,"Falta Puerto Send");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto Send: %d",pPdd->configArch->puertoSend);

	/*Puerto Disp Recv*/
	if(!(pPdd->configArch->puertoDispRecv=config_loader_getInt(buffer,"PuertoDispRecv:"))){
		logMessage(LOG_ERR,"Falta Puerto Disp Recv");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto Disp Recv: %d",pPdd->configArch->puertoDispRecv);

	/*Puerto Dispo Send*/
	if(!(pPdd->configArch->puertoDispSend=config_loader_getInt(buffer,"PuertoDispSend:"))){
		logMessage(LOG_ERR,"Falta Puerto Disp Send");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto Disp Send: %d",pPdd->configArch->puertoDispSend);

	/*Puerto PFS Poll*/
	if(!(pPdd->configArch->puertoPFSPoll=config_loader_getInt(buffer,"PuertoPFSPoll:"))){
		logMessage(LOG_ERR,"Falta puertoPFSPoll");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto puertoPFSPoll: %d",pPdd->configArch->puertoPFSPoll);

	/*Tiempo lectura*/
	if(!(pPdd->configArch->tiempoLectura=config_loader_getDouble(buffer,"TiempoDeLectura:"))){
		logMessage(LOG_ERR,"Falta Tiempo de Lectura");
		return 0;
	}
	logMessage(LOG_INFO,"Tiempo de Lectura: %d ms",pPdd->configArch->tiempoLectura);

	/*Tiempo escritura*/
	if(!(pPdd->configArch->tiempoEscritura=config_loader_getDouble(buffer,"TiempoDeLectura:"))){
		logMessage(LOG_ERR,"Falta Tiempo de Escritura");
		return 0;
	}
	logMessage(LOG_INFO,"Thread Principal", "Tiempo de Escritura: %u ms",pPdd->configArch->tiempoEscritura);

	/*RPM*/
	if(!(pPdd->configArch->RPM=config_loader_getDouble(buffer,"RPM:"))){
		logMessage(LOG_ERR,"Falta Revoluciones por Minuto");
		return 0;
	}
	logMessage(LOG_INFO,"Thread Principal", "Revoluciones Por Minuto: %d",pPdd->configArch->RPM);

	/*Tiempo salto de pista*/
	if(!(pPdd->configArch->tiempoSaltoPistas=config_loader_getDouble(buffer,"TiempoSaltoDePista:"))){
		logMessage(LOG_ERR,"Falta Tiempo de Salto de Pista");
		return 0;
	}
	logMessage(LOG_INFO,"Tiempo de Salto de Pista: %u",pPdd->configArch->tiempoSaltoPistas);

	/*Tamaño Poll MAX*/
	if(!(pPdd->configArch->tamPoll=config_loader_getInt(buffer,"TamañoPoll:"))){
		logMessage(LOG_ERR,"Falta tamPoll");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto tamPoll: %d",pPdd->configArch->tamPoll);

	/*Tamaño Cache */
	if(!(pPdd->configArch->tamCache=config_loader_getInt(buffer,"TamañoCache:"))){
		logMessage(LOG_ERR,"Falta tamCache");
		return 0;
	}
	logMessage(LOG_INFO, "Puerto tamCache: %d",pPdd->configArch->tamCache);

	/*LVL Log*/
	if(!(pPdd->configArch->lvlLog=config_loader_getInt(buffer,"LVLlog:"))){
		logMessage(LOG_ERR,"Falta lvlLog");
		return 0;
	}
	logMessage(LOG_INFO, "LvlLog: %d",pPdd->configArch->lvlLog);

	return 1;

}
